package com.yituo.mjworld.core.utils;

import java.io.Serializable;
import java.util.List;

/**
 * Created by MACHENIKE on 2017/7/11.
 * @author 谢琼
 */
public interface IBaseDao<T> {
  /**
   * 根据ID获取实体
   *
   * @param entityClass
   * @param id
   * @return
   */
  T get(Class<T> entityClass, Serializable id);

  /**
   * 保存实体.
   * 内部实现依赖Hibernate 的原生的save方法
   *
   * @param entity 被保存的实体类对象
   * @return 返回保存成功后的实体类的ID
   */
  Serializable save(T entity);

  /**
   * 更新实体
   *
   * @param entity
   */
  void saveOrUpdate(T entity);

  /**
   * 删除实体
   *
   * @param entity
   */
  void delete(T entity);

  /**
   * 删除
   * @param entityClazz 欲删除的实体类的Class 对象
   * @param id 欲删除的ID
   */
  void delete(Class<T> entityClazz, Serializable id);

  /**
   * 查询全部
   *
   * @param entity
   * @param id
   * @return
   */
  List<T> findAll(Class<T> entity, Serializable id);

  /**
   * 获取实体总数.
   *
   * @param enetityClazz 实体类的Class对象
   * @return 对应实体类的映射的表的总行数
   */
  long findCount(Class<T> enetityClazz);
}
